def dfs(u, cnt, n, m, node):
    # 剪枝技巧: 如果剩余元素不足以选择出 m 个，则剪枝
    if n - u + cnt < m:
        return

    # 如果已经选择了 m 个元素，则输出结果
    if cnt == m:
        print(*node[1:cnt + 1])
        return

    # 选择下一个元素，注意从 u + 1 开始，避免重复选择
    for i in range(u + 1, n + 1):
        node[cnt + 1] = i  # 添加元素
        dfs(i, cnt + 1, n, m, node)  # 递归
        node[cnt + 1] = 0  # 移除元素，回溯

def main():
    n, m = map(int, input().split())  # 输入 n 和 m
    node = [0] * (n + 1)  # 存储选择的元素，从索引 1 开始使用
    dfs(0, 0, n, m, node)  # 从元素 0 开始，已选择元素数量为 0

if __name__ == "__main__":
    main()